#!/usr/bin/python
# -*- coding: UTF-8 -*-
import re
import chardet
import os


class CommonTool:
    """
    公共工具类
    """

    def __init__(self):
        pass

    # 重写文本文件内容，覆盖内容
    @staticmethod
    def rewrite_file_content_f(filename: str, content: str):
        file = open(filename, 'w', encoding='utf-8')
        file.write(content)
        file.close()
        CommonTool.replace_with_linux_line_breaks_f(filename)

    # 追加写入文本文件内容
    @staticmethod
    def append_file_content_f(filename, content):
        # 打开文件
        file = open(filename, 'a', encoding='utf-8')
        # 追加内容
        file.write(content)
        # 关闭文件
        file.close()
        CommonTool.replace_with_linux_line_breaks_f(filename)

    # 读取文本文件所有内容
    @staticmethod
    def get_file_content_f(file_path_i: str):
        coding = CommonTool.get_encoding_f(file_path_i)
        with open(file_path_i, 'r', encoding=coding) as f:
            text = f.read()
        f.close()
        return text

    # 清空文本文件内容
    @staticmethod
    def clear_file_content_f(filename: str):
        file = open(filename, 'w', encoding='utf-8')
        file.write("")
        file.close()
        return None

    # 获取文本文件编码类型 (二进制方式读取，获取字节数据，检测类型)
    @staticmethod
    def get_encoding_f(file: str):
        with open(file, 'rb') as f:
            file_encoding_tmp_string = chardet.detect(f.read())['encoding']
        f.close()
        return file_encoding_tmp_string

    # 修改文本文件的编码为utf-8
    @staticmethod
    def change_file_encode_to_utf8_f(file_path: str):
        coding = CommonTool.get_encoding_f(file_path)
        with open(file_path, 'r', encoding=coding) as f:
            text = f.read()
        with open(file_path, 'w', encoding='utf-8') as f:
            f.write(text)
        f.close()

    # 文本文件中替换windows的换行符（\r\n）为Linux的换行符（\n）
    @staticmethod
    def replace_with_linux_line_breaks_f(file_full_path: str):
        with open(file_full_path, "rb") as f:
            data = bytearray(os.path.getsize(file_full_path))
            f.readinto(data)
            data = data.replace(b"\r\n", b"\n")
        with open(file_full_path, "wb") as f:
            f.write(data)
        f.close()

    # 查找字符串在list中是否存在，存在则返回第一个字符串所在的位置，忽略大小写
    @staticmethod
    def find_element_position_f(string_i: str, list_i: list):
        string_i = string_i.lower()
        # 使用Python内置列表推导式把list所有元素替换为小写
        list_i = [x.lower() for x in list_i]
        for element in list_i:
            if element in string_i:
                return string_i.index(element)  # 返回找到的第一个元素的位置
        return -1  # 如果没有找到任何匹配的元素，则返回-1

    # 查找字符串在list中是否存在，存在则返回那个存在的字符串，忽略大小写
    @staticmethod
    def find_element_f(string_i: str, list_i: list):
        string_i = string_i.lower()
        # 使用Python内置列表推导式把list所有元素替换为小写
        list_i = [x.lower() for x in list_i]
        # print("string_i = “" + string_i + "”")
        # print("lst = “" + str(lst) + "”")
        for element in list_i:
            if element in string_i:
                return element
        return -1

    # 字符串处理，根据字符，拆分成list，去除空值
    @staticmethod
    def string_split_f(string_i: str, split_string_i: str):
        # 字符串拆分：根据 split_string 拆分
        tmp_list = string_i.split(split_string_i)
        # 使用map函数去除list里面各项的首尾空格
        tmp_list = list(map(str.strip, tmp_list))
        # 使用列表推导式去除空值
        tmp_list = [item for item in tmp_list if item]
        # print(tmp_list)
        return tmp_list

    # 字符串拆分排序再合并 String split, sort, and merge
    @staticmethod
    def string_split_sort_and_merge_f(string_i: str):
        split_list = string_i.split(",")  # 拆分字符串为列表
        sorted_list = sorted(split_list)  # 对列表进行排序
        merged_string = ",".join(sorted_list)  # 合并为一个字符串
        return merged_string

    # 从字符串中提取出一连串的数字
    @staticmethod
    def get_numbers_from_string_f(input_string: str):
        nums = re.findall(r'\d+', input_string)
        if nums:
            return nums[0]
        else:
            return None

    # 判断整型是否为空
    @staticmethod
    def is_number_empty(input_number_i: int):
        return input_number_i is None

    # python把字典中的value,能转成整型的就转,不能的就字符串
    @staticmethod
    def convert_values(d):
        # 去掉值为空字符串的键值对
        d = {k: v for k, v in d.items() if v != ''}
        return {k: int(v) if v.isdigit() else v for k, v in d.items()}


if __name__ == '__main__':
    file_path = 'E:\\learn\\!!!git\\20240603-1339\\tzq-learn\\flask\\tutorial\\flaskr\\static\\json\\demo1.json'
    print(CommonTool.get_file_content_f(file_path))

